/**
 * 角色模拟记录模型
 */

const BaseProjectModel = require('./base_project_model.js');

class SimulationModel extends BaseProjectModel {
	
	// 定义集合名称
	static CL = 'bx_simulation';
	
	// 字段前缀
	static FIELD_PREFIX = '';
	
	// 是否启用ID
	static ADD_ID = true;
	
	// 是否添加更新时间
	static UPDATE_TIME = true;
	
	// 是否添加IP
	static UPDATE_IP = true;

	/**
	 * 构造函数
	 */
	constructor() {
		super();
		// this.setModel('simulation'); // 这个方法不存在，改用静态属性
	}

	/**
	 * 获取分页列表
	 * @param {*} userId 用户ID
	 * @param {*} search 搜索条件
	 * @param {*} orderBy 排序
	 * @param {*} page 页码
	 * @param {*} size 分页大小
	 * @param {*} isTotal 是否返回总数
	 * @param {*} oldTotal 旧总数
	 */
	async getList(userId, search, orderBy, page, size, isTotal, oldTotal) {
		orderBy = orderBy || {
			EDIT_TIME: 'desc'
		};
		let fields = '*';

		let where = {};
		if (userId) where.USER_ID = userId;

		if (search) {
			where.ROLE_NAME = {
				$regex: '.*' + search + '.*',
				$options: 'i'
			};
		}

		return await this.getListByWhere(where, fields, orderBy, page, size, isTotal, oldTotal);
	}

	/**
	 * 获取我的模拟记录列表
	 * @param {*} userId 用户ID
	 */
	async getMyList(userId) {
		if (!userId) return [];

		let orderBy = {
			EDIT_TIME: 'desc'
		};
		let fields = '*';
		let where = {
			USER_ID: userId
		};
		return await this.getListByWhere(where, fields, orderBy, 1, 100, false, 0);
	}

	/**
	 * 获取最近一条模拟记录
	 * @param {*} userId 用户ID 
	 */
	async getLatest(userId) {
		if (!userId) return null;

		let orderBy = {
			EDIT_TIME: 'desc'
		};
		let fields = '*';
		let where = {
			USER_ID: userId
		};

		let list = await this.getListByWhere(where, fields, orderBy, 1, 1, false, 0);
		if (list && list.list && list.list.length > 0)
			return list.list[0];
		else
			return null;
	}
}

module.exports = new SimulationModel(); 